#include <iostream>
using namespace std;

/*
    1. 拓展加法的作用范围
    2. 如何拓展--》 运算符重载
       语法规则: 程序员自己写个函数(函数名字有要求)，该函数拓展运算符号的作用范围
        返回值类型 operator+(运算符) (参数列表)
        {
            函数体
        }
    3.运算符重载的经验技巧
        (1)如何确定返回值和形参类型个数呢
        人类熟悉的运算表达式
            int result = c1 + c2;
        把运算符表达式转成函数调用(编译器理解你的表达式)
            int result = c1.operator+(c2);

*/

class Cat
{
public:
    Cat(string name, int age)
    {
        this->name = name;
        this->age = age;
    }

    Cat operator+(Cat &cat)
    {
        Cat newCat(this->name + cat.name, this->age + cat.age);
        return newCat;
    }

    void print()
    {
        cout << name << " " << age << endl;
    }

private:
    string name;
    int age;
};

int main()
{
    Cat cat1("Tom", 3);
    Cat cat2("Jerry", 2);
    Cat cat3 = cat1 + cat2;
    cat3.print();
    return 0;
}
